iT邦幫忙

2024 iThome 鐵人賽

DAY 5
0
AI/ ML & Data

使用 jq 處理資料系列 第 5

Day5: 使用 jq filter 取得 JSON 物件屬性值

  • 分享至 

  • xImage
  •  

我們昨天充實而認真的複習了 JSON ,今天繼續向前邁進啦~

對話中學習

師傅:徒弟,今天我們用curl從一個網站取回單一物件。

徒弟:好的,師傅,這個網站是哪個呢?

師傅:就是https://jsonplaceholder.typicode.com/todos/1,這裡有個 TODO。

徒弟:哦,明白了,然後我用curl發送請求,是吧?

師傅:對,命令是:curl https://jsonplaceholder.typicode.com/todos/1

徒弟:這樣我就能拿到這個物件了……然後呢?

師傅:接下來用jq來看裡面有什麼寶藏。

徒弟:那我應該怎麼寫?是用jq提取title嗎?

師傅:對,正確!命令是:curl https://jsonplaceholder.typicode.com/todos/1 | jq ".title"

徒弟:這樣我就能看到 TODO 的標題了,對嗎?

師傅:沒錯!就像打開一份秘密文件。

徒弟:如果我想要看到completed的狀態呢?

師傅:很簡單,改成jq ".completed"

徒弟:所以我應該這樣寫:curl https://jsonplaceholder.typicode.com/todos/1 | jq ".completed"

師傅:對,太棒了!你學得像喝水一樣輕鬆。

徒弟:還有其他用法嗎?比如回傳整個物件?

師傅:當然!用jq ".",就像全景式的電影。

徒弟:所以命令是curl https://jsonplaceholder.typicode.com/todos/1 | jq "."

師傅:正確!讓你一次看到所有內容。


filter: jq 的主要程式

Day2: curl 與 jq 起手式 ,我們執行了以下指令:

curl https://jsonplaceholder.typicode.com/todos/1 | jq

這個指令省略了 | jq 後面的 "filter 表達式",所以執行的結果是預設的讀取文字輸入、輸出為 JSON 。而這個 "filter 表達式" 其實才是真正的重頭戲 —— jq 的主要程式。

filter 表達式之 . identity operator (恆等運算子)

. 稱作 identity operator(恆等運算子),是最基礎的 filter。

在指令 | jq 後面接著使用 "." 作為 filter 表達式,輸出結果會跟我們上面執行的指令(沒有給 filter)一樣;也就是預設的過濾結果: 將原本輸入的文字原封不動的輸出為JSON。

curl https://jsonplaceholder.typicode.com/todos/1 | jq "."

https://ithelp.ithome.com.tw/upload/images/20240917/200783890CB4k9iUfH.png

❗注意:
使用 Windows 命令提示字元,filter 表達式最外層要使用雙引號 " ;Powershell, Unix shell 則是使用 單引號'

filter 表達式之 .foo Object Identifier-Index (物件屬性識別索引)

最簡單有用的過濾器的形式為 .foo 。輸入 JSON 物件時,如果存在屬性「foo」, .foo 會查找該物件的「foo」屬性並輸出值,如果該屬性不存在則輸出 null。

使用 ".title" 會查找 title 屬性,並輸出該屬性的值

curl https://jsonplaceholder.typicode.com/todos/1 | jq ".title"

使用 ".title1" 會查找 title1 屬性;因為該屬性不存在,則輸出 null (參考下圖)

curl https://jsonplaceholder.typicode.com/todos/1 | jq ".title1"

https://ithelp.ithome.com.tw/upload/images/20240917/20078389t6r4jlb6HI.png

結論

今天我們學到了 jq 的主程式 ——— "filter" 的兩個表達式。一個是恆等運算子 . ,另一個是物件屬性識別索引 .foo.foo 的作用非常的直觀,就是查出屬性並輸出值。學到這個屬性查找之後,有沒有躍躍欲試的fu呢? 讓我們繼續學習吧!


上一篇
Day4: JSON 學習小站
下一篇
Day6: 處理本地端 JSON 檔案
系列文
使用 jq 處理資料30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言